﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Collections;
using Model;

namespace Controller
{
    public class cntrProcesso
    {
        public cntrProcesso()
        {  
        }

        Processo objProcesso;

        #region Metodos

        #region Salvar

        public Boolean Save(DS_Lawyer.ProcessoRow pProcesso)
        {
            Boolean flagReturn = false;
            if (pProcesso.idProcesso == string.Empty)
            {
                this.objProcesso = new Processo();
                this.objProcesso.IdProcesso = System.Guid.NewGuid().ToString();
                this.objProcesso.NrProcesso = pProcesso.nrProcesso;
                this.objProcesso.Foro = Foro.RetriveObject(pProcesso.idForo);
                this.objProcesso.Cliente = Cliente.RetriveObject(pProcesso.idCliente);
                this.objProcesso.Data = pProcesso.data;
                this.objProcesso.Observacoes_detalhes = pProcesso.observacoes;
                this.objProcesso.Pasta_local = pProcesso.pasta_local;
                this.objProcesso.Protocolo = pProcesso.protocolo;
                this.objProcesso.Valor_causa = pProcesso.valor_causa;
                this.objProcesso.Status = pProcesso.status;
                this.objProcesso.TipoProcesso = pProcesso.tipoProcesso;
               

                try
                {
                    flagReturn = this.objProcesso.Persist();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            else
            {
                this.objProcesso = Processo.RetriveObject(pProcesso.idProcesso);
                this.objProcesso.NrProcesso = pProcesso.nrProcesso;
                this.objProcesso.Foro.IdForo = pProcesso.idForo;
                this.objProcesso.Cliente.IdCliente = pProcesso.idCliente;
                this.objProcesso.Data = pProcesso.data;
                this.objProcesso.Observacoes_detalhes = pProcesso.observacoes;
                this.objProcesso.Pasta_local = pProcesso.pasta_local;
                this.objProcesso.Protocolo = pProcesso.protocolo;
                this.objProcesso.Valor_causa = pProcesso.valor_causa;
                this.objProcesso.Status = pProcesso.status;
                this.objProcesso.TipoProcesso = pProcesso.tipoProcesso;
                try
                {
                    flagReturn = this.objProcesso.Update();
                }
                catch (Exception ex)
                {

                    throw ex;
                }
            }
            return flagReturn;
        }
        #endregion

        #region MudarStatus
        public Boolean MudarStatus(DS_Lawyer.ProcessoRow pProcesso)
        {
            Boolean flagReturn = false;
            this.objProcesso = Processo.RetriveObject(pProcesso.idProcesso);
            if (pProcesso.status == '1' )
              pProcesso.status = '0';
            else
              pProcesso.status = '1';

            this.objProcesso.Status = pProcesso.status;

             try
            {
                flagReturn = this.objProcesso.Update();
            }
            catch (Exception e)
            {
                throw e;
            }
            return flagReturn;
        }


        #endregion

        #region Select

        #region SelecByNr
        public DS_Lawyer.ProcessoRow Select(string pNrProcesso)
        {
            DS_Lawyer.ProcessoDataTable dtProcesso = new DS_Lawyer.ProcessoDataTable();
            DS_Lawyer.ProcessoRow rowProcesso = dtProcesso.NewProcessoRow();

            try
            {
                this.objProcesso = Processo.RetriveObject(pNrProcesso);
                rowProcesso.idProcesso = this.objProcesso.IdProcesso;
                rowProcesso.nrProcesso = pNrProcesso;
                rowProcesso.idCliente = this.objProcesso.Cliente.IdCliente;
                rowProcesso.idForo = this.objProcesso.Foro.IdForo;
                rowProcesso.data = this.objProcesso.Data;
                rowProcesso.protocolo = this.objProcesso.Protocolo;
                rowProcesso.pasta_local = this.objProcesso.Pasta_local;
                rowProcesso.valor_causa = this.objProcesso.Valor_causa;
                rowProcesso.tipoProcesso = this.objProcesso.TipoProcesso;
                rowProcesso.status = this.objProcesso.Status;
                rowProcesso.observacoes = this.objProcesso.Observacoes_detalhes;
                rowProcesso.nomeCliente = this.objProcesso.Cliente.Nome;
                rowProcesso.nomeForo = this.objProcesso.Foro.Descricao;

            }
            catch (Exception ex)
            {
                
                throw ex;
            }

            return rowProcesso;
        }
        #endregion





        public static DS_Lawyer.ProcessoDataTable Select()
        {
            DS_Lawyer.ProcessoDataTable dtProcesso = new DS_Lawyer.ProcessoDataTable();
            try
            {
                IList listProcessos = Processo.RetriveObjects();
                for (int i = 0; i < listProcessos.Count; i++)
                {
                    Processo objProcesso = (Processo)listProcessos[i];
                    dtProcesso.AddProcessoRow(objProcesso.IdProcesso, objProcesso.NrProcesso,
                        objProcesso.Cliente.IdCliente, objProcesso.TipoProcesso,
                        objProcesso.Foro.IdForo, objProcesso.Status, objProcesso.Data,
                        objProcesso.Pasta_local, objProcesso.Valor_causa, objProcesso.Protocolo,
                        objProcesso.Observacoes_detalhes, objProcesso.Cliente.Nome, objProcesso.Foro.Descricao);
                }
            }
            catch (Exception ex)
            {
                //Tratar mensagem de erro aqui!
                throw ex;

            }
            return dtProcesso;
        }



        public static DS_Lawyer.ProcessoDataTable SelectByName(string pNrProcesso)
        {
            DS_Lawyer.ProcessoDataTable dtProcesso = new DS_Lawyer.ProcessoDataTable();
            try
            {
                IList listProcessos = Processo.RetriveObjects(pNrProcesso);
                for (int i = 0; i < listProcessos.Count; i++)
                {
                    Processo objProcesso = (Processo)listProcessos[i];
                    dtProcesso.AddProcessoRow(objProcesso.IdProcesso, objProcesso.NrProcesso,
                        objProcesso.Cliente.IdCliente, objProcesso.TipoProcesso,
                        objProcesso.Foro.IdForo, objProcesso.Status, objProcesso.Data,
                        objProcesso.Pasta_local, objProcesso.Valor_causa, objProcesso.Protocolo,
                        objProcesso.Observacoes_detalhes, objProcesso.Cliente.Nome, objProcesso.Foro.Descricao);
                }
            }
            catch (Exception ex)
            {
                //Tratar mensagem de erro aqui!
                throw ex;

            }
            return dtProcesso;
        }

        public static DS_Lawyer.ProcessoDataTable SelectByCliente(string pIdCliente)
        {
            DS_Lawyer.ProcessoDataTable dtProcesso = new DS_Lawyer.ProcessoDataTable();
            try
            {
                IList listProcessos = Processo.RetriveObjects(Cliente.RetriveObject(pIdCliente));
                for (int i = 0; i < listProcessos.Count; i++)
                {
                    Processo objProcesso = (Processo)listProcessos[i];
                    dtProcesso.AddProcessoRow(objProcesso.IdProcesso, objProcesso.NrProcesso,
                        objProcesso.Cliente.IdCliente, objProcesso.TipoProcesso,
                        objProcesso.Foro.IdForo, objProcesso.Status, objProcesso.Data,
                        objProcesso.Pasta_local, objProcesso.Valor_causa, objProcesso.Protocolo,
                        objProcesso.Observacoes_detalhes, objProcesso.Cliente.Nome, objProcesso.Foro.Descricao);
                }
            }
            catch (Exception ex)
            {
                //Tratar mensagem de erro aqui!
                throw ex;

            }
            return dtProcesso;
        }

        #endregion


        #endregion
    }
}
